import { app, BrowserWindow } from 'electron'
import { createRequire } from 'node:module'
import { fileURLToPath } from 'node:url'
import path from 'node:path'

// 创建 require 函数，因为 ES 模块中没有内置的 require
const require = createRequire(import.meta.url)

// 获取 __dirname，因为 ES 模块中没有内置的 __dirname
const __dirname = path.dirname(fileURLToPath(import.meta.url))

// 设置应用根目录路径
process.env.APP_ROOT = path.join(__dirname, '..')

// 🚧 使用 ['ENV_NAME'] 来避免 vite:define 插件的问题 - Vite@2.x 的遗留问题
// 导出开发服务器 URL 和相关目录路径
export const VITE_DEV_SERVER_URL = process.env['VITE_DEV_SERVER_URL']
export const MAIN_DIST = path.join(process.env.APP_ROOT, 'dist-electron')
export const RENDERER_DIST = path.join(process.env.APP_ROOT, 'dist')

// 设置公共资源目录路径
process.env.VITE_PUBLIC = VITE_DEV_SERVER_URL ? path.join(process.env.APP_ROOT, 'public') : RENDERER_DIST


let win

/**
 * 创建窗口
 */
function createWindow() {
  // 创建窗口
  win = new BrowserWindow({
    width: 1600,
    height: 900,
    icon: path.join(process.env.VITE_PUBLIC, 'electron-vite.svg'),
    webPreferences: {
      // 这里指定编译后的预加载脚本(dist-electron/preload.mjs)，后缀为mjs
      preload: path.join(__dirname, 'preload.mjs'),
    },
  })

  // 启用开发者工具
  win.webContents.openDevTools()

  // 向渲染进程发送测试消息
  win.webContents.on('did-finish-load', () => {
    win?.webContents.send('main-process-message', (new Date).toLocaleString())
  })

  // 根据环境加载不同的页面
  if (VITE_DEV_SERVER_URL) {
    win.loadURL(VITE_DEV_SERVER_URL)  // 开发环境：加载开发服务器 URL
  } else {
    win.loadFile(path.join(RENDERER_DIST, 'index.html'))  // 生产环境：加载打包后的 HTML 文件
  }
}

// macOS 下点击关闭按钮时只隐藏窗口，不退出应用
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
    win = null
  }
})

// macOS 下点击 dock 栏图标时重新创建窗口
app.on('activate', () => {
  if (BrowserWindow.getAllWindows().length === 0) {
    createWindow()
  }
})

// 应用就绪后创建窗口
app.whenReady().then(createWindow)
